package org.locker.domain.vo;

import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.google.api.client.testing.http.HttpTesting;
import org.locker.domain.DeviceOperateLog;
import org.locker.domain.Order;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.locker.common.excel.annotation.ExcelDictFormat;
import org.locker.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;

import java.io.Serial;
import java.io.Serializable;
import java.util.List;


/**
 * 订单视图对象 lk_order
 *
 * @author winnie
 * @date 2023-10-11
 */
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = Order.class)
public class OrderVo implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 订单ID
     */
    @ExcelProperty(value = "订单ID")
    private Long orderId;

    /**
     * 用户ID
     */
    @ExcelProperty(value = "用户ID")
    private Long userId;

    /**
     * 手机号码
     */
    @ExcelProperty(value = "手机号码")
    private String phone;

    /**
     * 设备号
     */
    @ExcelProperty(value = "设备号")
    private String deviceNo;

    /**
     * 设备名称
     */
    private String deviceName;

    /**
     * 格子ID
     */
    @ExcelProperty(value = "格子ID")
    private Long deviceGridId;

    /**
     * 格子名称
     */
    private String deviceGridName;

    /**
     * 格子编码
     */
    private String deviceGridNumber;

    /**
     * 开锁密码
     */
    @ExcelProperty(value = "开锁密码")
    private String openPwd;

    /**
     * 订单编号
     */
    @ExcelProperty(value = "订单编号")
    private String orderNo;

    /**
     * 场地ID
     */
    @ExcelProperty(value = "场地ID")
    private Long positionId;

    /**
     * 场地名称
     */
    private String positionName;

    /**
     * 场地位置
     */
    private String positionLocation;


    /**
     * 微信交易流水号
     */
    @ExcelProperty(value = "微信交易流水号")
    private String transactionNo;

    /**
     * 自定义交易号
     */
    @ExcelProperty(value = "自定义交易号")
    private String outTradeNo;

    /**
     * 实际支付金额(微信支付的)
     */
    @ExcelProperty(value = "实际支付金额(微信支付的)")
    private BigDecimal payAmount;

    /**
     * 存柜预付金额
     */
    @ExcelProperty(value = "存柜预付金额")
    private BigDecimal prestoreDeviceAmount;

    /**
     * 押金金额
     */
    @ExcelProperty(value = "押金金额")
    private BigDecimal depositAmount;

    /**
     * 计费单价
     */
    @ExcelProperty(value = "计费单价")
    private BigDecimal unitPrice;

    /**
     * 实际计算的设备存柜金额
     */
    @ExcelProperty(value = "实际计算的设备存柜金额")
    private BigDecimal actualDeviceAmount;

    /**
     * 剩余的金额，交易完成需要存到用户余额。
     */
    @ExcelProperty(value = "剩余的金额，交易完成需要存到用户余额。")
    private BigDecimal residueAmount;

    /**
     * 开始时间
     */
    @ExcelProperty(value = "开始时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date startTime;

    /**
     * 结束时间
     */
    @ExcelProperty(value = "结束时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date endTime;

    /**
     * 状态：create 创建订单 ,wait_notify 等待通知,pay_success 成功, fail 用户取消,交易失败() , in_used 使用中, used_done 使用完成
     */
    @ExcelProperty(value = "状态：create 创建订单 ,wait_notify 等待通知,pay_success 成功, fail 用户取消,交易失败() , in_used 使用中, used_done 使用完成", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "order_status")
    private String orderStatus;

    /**
     * 身份证号码
     */
    @ExcelProperty(value = "身份证号码")
    private String idNo;

    /**
     * 交易完成时间
     */
    @ExcelProperty(value = "交易完成时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date successTime;

    /**
     * 支付时间
     */
    @ExcelProperty(value = "支付时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date payTime;

    /**
     * 是否已经转余额：yes 是，no 否
     */
    @ExcelProperty(value = "是否已经转余额：yes 是，no 否")
    private String isToBalance;

    /**
     * offline 离线  online 在线
     */
    @ExcelProperty(value = "offline 离线  online 在线")
    private String isOffline;

    /**
     * 订单类型：times 按次, hour 按时,
     */
    @ExcelProperty(value = "订单类型：times 按次, hour 按时,", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "order_type")
    private String orderType;

    /**
     * 支付方式：余额支付：balance, 微信支付 wx_pay, 系统支付(零元/免单): system_pay
     */
    @ExcelProperty(value = "支付方式：余额支付：balance, 微信支付 wx_pay, 系统支付(零元/免单): system_pay", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "pay_way")
    private String payWay;

    /**
     * 备注
     */
    @ExcelProperty(value = "备注")
    private String remark;

    /**
     * 退款状态：refund_no 押金未退，refunding 退款中，refund_success 退款成功
     */
    @ExcelProperty(value = "退款状态", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "refund_status")
    private String refundStatus;

    /**
     * 结算状态,不可结算:unsettleable, 可结算:settleable, 已结算:settled
     */
    private String settlementStatus;

    /**
     * 分账状态：spilt_no 未分账，spilting 分账中，spilt_success 分账成功
     */
    private String paySpiltStatus;


    /**
     * 操作记录
     */
    private List<DeviceOperateLog> deviceOperateLogList;

}
